// 版权所有2021 Go作者。版权所有。
// 此源代码的使用受BSD样式的约束
// 可以在许可证文件中找到的许可证。

package base

import (
	"cmd/internal/obj"
)

var Ctxt *obj.Link

// TODO（mdempsky）：这些应该是obj.Link方法。

// PkgLinksym返回给定范围内名称的链接器符号
// 包前缀。对于用户包，前缀应为包
// 使用objabi.PathToPrefix编码的路径。
func PkgLinksym(prefix, name string, abi obj.ABI) *obj.LSym {
	if name == "_" {
		// TODO（mdempsky）：清除呼叫者和Fatalf。
		return linksym(prefix, "_", abi)
	}
	return linksym(prefix, prefix+"."+name, abi)
}

// Linkname返回给定名称的链接器符号
// 出现在
func Linkname(name string, abi obj.ABI) *obj.LSym {
	return linksym("_", name, abi)
}

// linksym是一个内部帮助函数，用于实现上述功能
// 导出的API。
func linksym(pkg, name string, abi obj.ABI) *obj.LSym {
	return Ctxt.LookupABIInit(name, abi, func(r *obj.LSym) { r.Pkg = pkg })
}
